/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * SeleccionarMedicamentoPresentacion.java
 *
 * Created on 01/09/2010, 18:00:53
 */

package presentacion.medicamento;

import hibernate.objeto.GrupoTerapeuticoMedicamento;
import hibernate.objeto.LaboratorioMedicamento;
import hibernate.objeto.NombreComercialMedicamento;
import hibernate.objeto.PrincipioActivoMedicamento;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Vector;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.RowFilter;
import javax.swing.table.TableRowSorter;
import logica.CapaLogica;
import logica.GrupoTerapeuticoMedicamentoLogica;
import logica.LaboratorioMedicamentoLogica;
import logica.NombreComercialMedicamentoLogica;
import logica.PrincipioActivoMedicamentoLogica;
import presentacion.CapaPresentacion;
import presentacion.acceso.RestriccionAcceso;
import presentacion.utilidad.maquetado.Fuente;
import presentacion.utilidad.maquetado.Icono;
import presentacion.utilidad.BarMenu;
import presentacion.utilidad.MensajePresentacion;
import presentacion.utilidad.Paginador;
import presentacion.utilidad.PopUpMenu;
import presentacion.utilidad.tabla.MiModeloTabla;

/**
 *
 * @author Gonzalo
 */
public class GestionMedicamentoPresentacion extends javax.swing.JDialog {



    /** Creates new form SeleccionarMedicamentoPresentacion */
    public GestionMedicamentoPresentacion(java.awt.Frame parent, boolean modal,
            boolean esVisualizacion) {
        super(parent, modal);


        this.guiVisualizacion = esVisualizacion;

        initComponents();
        setSize(CapaPresentacion.getTamañoMaximoJDialog());
        setLocationRelativeTo(null);
        personalizarGUI();
        setearEventosQueCapturanTeclaEnterYEscape();
    }

    private void personalizarGUI() {
        //Crea la barra de menu
        this.setJMenuBar(BarMenu.createMenuBarGestionMedicamento(this));

        panelNombreComercial.setVisible(false);

        criterioDeBusqueda = "";

        iniciarPaginador();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        textoDescriptivoVentana = new javax.swing.JLabel();
        panelCriterioDeBusqueda = new javax.swing.JPanel();
        textoNombreComercial = new javax.swing.JLabel();
        textoPrincipioActivo = new javax.swing.JLabel();
        textoGrupoTerapeutico = new javax.swing.JLabel();
        textoLaboratorio = new javax.swing.JLabel();
        busquedaGrupoTerapeutico = new javax.swing.JTextField();
        busquedaLaboratorio = new javax.swing.JTextField();
        busquedaPrincipioActivo = new javax.swing.JTextField();
        busquedaNombreComercial = new javax.swing.JTextField();
        botonBuscarNombreComercial = new javax.swing.JButton();
        botonBuscarPrincipioActivo = new javax.swing.JButton();
        botonBuscarGrupoTerapeutico = new javax.swing.JButton();
        botonBuscarLaboratorio = new javax.swing.JButton();
        panelResultados = new javax.swing.JPanel();
        botonAgregarMedicamento = new javax.swing.JButton();
        textoFiltrarResultados = new javax.swing.JLabel();
        filtrarMedicamento = new javax.swing.JTextField();
        tablaMedicamentoScrollPane = new javax.swing.JScrollPane();
        tablaMedicamento = new javax.swing.JTable(new presentacion.utilidad.tabla.MiModeloTabla());
        paginadorUno = new javax.swing.JPanel();
        botonAnteriorPaginadorUno = new javax.swing.JButton();
        botonSiguientePaginadorUno = new javax.swing.JButton();
        panelNombreComercial = new javax.swing.JPanel();
        paginadorDos = new javax.swing.JPanel();
        botonAnteriorPaginadorDos = new javax.swing.JButton();
        botonSiguientePaginadorDos = new javax.swing.JButton();
        textoFiltrar = new javax.swing.JLabel();
        filtrarNombreComercial = new javax.swing.JTextField();
        tablaNombreComercialScrollPane = new javax.swing.JScrollPane();
        tablaNombreComercial = new javax.swing.JTable(new MiModeloTabla());
        panelInformacion = new javax.swing.JPanel();
        panelDescripcionScrollPane = new javax.swing.JScrollPane();
        panelDescripcion = new javax.swing.JEditorPane();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Gestión de Medicamentos");
        setMinimumSize(new java.awt.Dimension(1040, 731));
        setResizable(false);

        textoDescriptivoVentana.setFont(Fuente.FUENTE_TITULO_2);
        textoDescriptivoVentana.setForeground(Fuente.COLOR_NORMAL);
        textoDescriptivoVentana.setText("Gestión de medicamentos");
        textoDescriptivoVentana.setPreferredSize(new java.awt.Dimension(496, 20));

        panelCriterioDeBusqueda.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Criterio de búsqueda", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, Fuente.FUENTE_PANEL_BORDE));
        panelCriterioDeBusqueda.setForeground(Fuente.COLOR_NORMAL);
        panelCriterioDeBusqueda.setNextFocusableComponent(busquedaNombreComercial);
        panelCriterioDeBusqueda.setPreferredSize(new java.awt.Dimension(496, 162));

        textoNombreComercial.setFont(Fuente.FUENTE_LABEL);
        textoNombreComercial.setForeground(Fuente.COLOR_NORMAL);
        textoNombreComercial.setText("Nombre comercial");
        textoNombreComercial.setPreferredSize(new java.awt.Dimension(95, 20));

        textoPrincipioActivo.setFont(Fuente.FUENTE_LABEL);
        textoPrincipioActivo.setForeground(Fuente.COLOR_NORMAL);
        textoPrincipioActivo.setText("Principio activo");
        textoPrincipioActivo.setPreferredSize(new java.awt.Dimension(95, 20));

        textoGrupoTerapeutico.setFont(Fuente.FUENTE_LABEL);
        textoGrupoTerapeutico.setForeground(Fuente.COLOR_NORMAL);
        textoGrupoTerapeutico.setText("Grupo terapéutico");
        textoGrupoTerapeutico.setPreferredSize(new java.awt.Dimension(95, 20));

        textoLaboratorio.setFont(Fuente.FUENTE_LABEL);
        textoLaboratorio.setForeground(Fuente.COLOR_NORMAL);
        textoLaboratorio.setText("Laboratorio");
        textoLaboratorio.setPreferredSize(new java.awt.Dimension(95, 20));

        busquedaGrupoTerapeutico.setFont(Fuente.FUENTE_TEXTFIELD);
        busquedaGrupoTerapeutico.setForeground(Fuente.COLOR_NORMAL);
        busquedaGrupoTerapeutico.setToolTipText("Filtra los datos encontrados por algún criterio");
        busquedaGrupoTerapeutico.setNextFocusableComponent(botonBuscarGrupoTerapeutico);
        busquedaGrupoTerapeutico.setPreferredSize(new java.awt.Dimension(249, 20));

        busquedaLaboratorio.setFont(Fuente.FUENTE_TEXTFIELD);
        busquedaLaboratorio.setForeground(Fuente.COLOR_NORMAL);
        busquedaLaboratorio.setToolTipText("Filtra los datos encontrados por algún criterio");
        busquedaLaboratorio.setNextFocusableComponent(botonBuscarLaboratorio);
        busquedaLaboratorio.setPreferredSize(new java.awt.Dimension(249, 20));

        busquedaPrincipioActivo.setFont(Fuente.FUENTE_TEXTFIELD);
        busquedaPrincipioActivo.setForeground(Fuente.COLOR_NORMAL);
        busquedaPrincipioActivo.setToolTipText("Filtra los datos encontrados por algún criterio");
        busquedaPrincipioActivo.setNextFocusableComponent(botonBuscarPrincipioActivo);
        busquedaPrincipioActivo.setPreferredSize(new java.awt.Dimension(249, 20));

        busquedaNombreComercial.setFont(Fuente.FUENTE_TEXTFIELD);
        busquedaNombreComercial.setForeground(Fuente.COLOR_NORMAL);
        busquedaNombreComercial.setToolTipText("Filtra los datos encontrados por algún criterio");
        busquedaNombreComercial.setNextFocusableComponent(botonBuscarNombreComercial);
        busquedaNombreComercial.setPreferredSize(new java.awt.Dimension(249, 20));

        botonBuscarNombreComercial.setFont(Fuente.FUENTE_BOTON_INTERNO);
        botonBuscarNombreComercial.setForeground(Fuente.COLOR_NORMAL);
        botonBuscarNombreComercial.setIcon(Icono.ICONO_16_BUSCAR);
        botonBuscarNombreComercial.setText("Buscar");
        botonBuscarNombreComercial.setNextFocusableComponent(busquedaPrincipioActivo);
        botonBuscarNombreComercial.setPreferredSize(new java.awt.Dimension(110, 20));
        botonBuscarNombreComercial.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonBuscarNombreComercialActionPerformed(evt);
            }
        });

        botonBuscarPrincipioActivo.setFont(Fuente.FUENTE_BOTON_INTERNO);
        botonBuscarPrincipioActivo.setForeground(Fuente.COLOR_NORMAL);
        botonBuscarPrincipioActivo.setIcon(Icono.ICONO_16_BUSCAR);
        botonBuscarPrincipioActivo.setText("Buscar");
        botonBuscarPrincipioActivo.setNextFocusableComponent(busquedaGrupoTerapeutico);
        botonBuscarPrincipioActivo.setPreferredSize(new java.awt.Dimension(110, 20));
        botonBuscarPrincipioActivo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonBuscarPrincipioActivoActionPerformed(evt);
            }
        });

        botonBuscarGrupoTerapeutico.setFont(Fuente.FUENTE_BOTON_INTERNO);
        botonBuscarGrupoTerapeutico.setForeground(Fuente.COLOR_NORMAL);
        botonBuscarGrupoTerapeutico.setIcon(Icono.ICONO_16_BUSCAR);
        botonBuscarGrupoTerapeutico.setText("Buscar");
        botonBuscarGrupoTerapeutico.setNextFocusableComponent(busquedaLaboratorio);
        botonBuscarGrupoTerapeutico.setPreferredSize(new java.awt.Dimension(110, 20));
        botonBuscarGrupoTerapeutico.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonBuscarGrupoTerapeuticoActionPerformed(evt);
            }
        });

        botonBuscarLaboratorio.setFont(Fuente.FUENTE_BOTON_INTERNO);
        botonBuscarLaboratorio.setForeground(Fuente.COLOR_NORMAL);
        botonBuscarLaboratorio.setIcon(Icono.ICONO_16_BUSCAR);
        botonBuscarLaboratorio.setText("Buscar");
        botonBuscarLaboratorio.setNextFocusableComponent(filtrarMedicamento);
        botonBuscarLaboratorio.setPreferredSize(new java.awt.Dimension(110, 20));
        botonBuscarLaboratorio.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonBuscarLaboratorioActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout panelCriterioDeBusquedaLayout = new javax.swing.GroupLayout(panelCriterioDeBusqueda);
        panelCriterioDeBusqueda.setLayout(panelCriterioDeBusquedaLayout);
        panelCriterioDeBusquedaLayout.setHorizontalGroup(
            panelCriterioDeBusquedaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelCriterioDeBusquedaLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelCriterioDeBusquedaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                    .addComponent(textoLaboratorio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textoPrincipioActivo, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textoGrupoTerapeutico, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textoNombreComercial, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(panelCriterioDeBusquedaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(busquedaGrupoTerapeutico, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(busquedaNombreComercial, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(busquedaPrincipioActivo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(busquedaLaboratorio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(panelCriterioDeBusquedaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(botonBuscarLaboratorio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(botonBuscarGrupoTerapeutico, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(botonBuscarPrincipioActivo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(botonBuscarNombreComercial, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );
        panelCriterioDeBusquedaLayout.setVerticalGroup(
            panelCriterioDeBusquedaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelCriterioDeBusquedaLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelCriterioDeBusquedaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(textoNombreComercial, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(busquedaNombreComercial, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(botonBuscarNombreComercial, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(panelCriterioDeBusquedaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(textoPrincipioActivo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(busquedaPrincipioActivo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(botonBuscarPrincipioActivo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(panelCriterioDeBusquedaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(textoGrupoTerapeutico, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(busquedaGrupoTerapeutico, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(botonBuscarGrupoTerapeutico, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(panelCriterioDeBusquedaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(busquedaLaboratorio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textoLaboratorio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(botonBuscarLaboratorio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        panelResultados.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Resultados encontrados", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, Fuente.FUENTE_PANEL_BORDE));
        panelResultados.setForeground(Fuente.COLOR_NORMAL);
        panelResultados.setMaximumSize(new java.awt.Dimension(496, 225));
        panelResultados.setPreferredSize(new java.awt.Dimension(496, 225));

        botonAgregarMedicamento.setFont(Fuente.FUENTE_BOTON_INTERNO);
        botonAgregarMedicamento.setForeground(Fuente.COLOR_NORMAL);
        botonAgregarMedicamento.setIcon(Icono.ICONO_16_AGREGAR);
        botonAgregarMedicamento.setText("Agregar medicamento");
        botonAgregarMedicamento.setToolTipText("Agrega un nuevo medicamento");
        botonAgregarMedicamento.setPreferredSize(new java.awt.Dimension(175, 20));
        botonAgregarMedicamento.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonAgregarMedicamentoActionPerformed(evt);
            }
        });

        textoFiltrarResultados.setFont(Fuente.FUENTE_LABEL);
        textoFiltrarResultados.setForeground(Fuente.COLOR_NORMAL);
        textoFiltrarResultados.setText("Filtrar");
        textoFiltrarResultados.setPreferredSize(new java.awt.Dimension(28, 20));

        filtrarMedicamento.setFont(Fuente.FUENTE_TEXTFIELD);
        filtrarMedicamento.setForeground(Fuente.COLOR_NORMAL);
        filtrarMedicamento.setToolTipText("Filtra los datos encontrados por algún criterio");
        filtrarMedicamento.setNextFocusableComponent(tablaMedicamento);
        filtrarMedicamento.setPreferredSize(new java.awt.Dimension(150, 20));
        filtrarMedicamento.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                filtrarMedicamentoKeyReleased(evt);
            }
        });

        tablaMedicamentoScrollPane.setPreferredSize(new java.awt.Dimension(556, 151));

        tablaMedicamento.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                verCaracteristicasMouseClicked(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                tablaMedicamentoMouseReleased(evt);
            }
        });
        tablaMedicamento.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                tablaMedicamentoKeyReleased(evt);
            }
        });
        tablaMedicamentoScrollPane.setViewportView(tablaMedicamento);
        MiModeloTabla.inicializarTabla(tablaMedicamento);

        paginadorUno.setMaximumSize(new java.awt.Dimension(700, 14));

        botonAnteriorPaginadorUno.setFont(new java.awt.Font("Tahoma", 0, 10));
        botonAnteriorPaginadorUno.setIcon(Icono.ICONO_16_ANTERIOR);
        botonAnteriorPaginadorUno.setPreferredSize(new java.awt.Dimension(43, 23));
        botonAnteriorPaginadorUno.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonAnteriorPaginadorUnoActionPerformed(evt);
            }
        });

        botonSiguientePaginadorUno.setFont(new java.awt.Font("Tahoma", 0, 10));
        botonSiguientePaginadorUno.setIcon(Icono.ICONO_16_SIGUIENTE);
        botonSiguientePaginadorUno.setPreferredSize(new java.awt.Dimension(43, 23));
        botonSiguientePaginadorUno.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonSiguientePaginadorUnoActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout paginadorUnoLayout = new javax.swing.GroupLayout(paginadorUno);
        paginadorUno.setLayout(paginadorUnoLayout);
        paginadorUnoLayout.setHorizontalGroup(
            paginadorUnoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(paginadorUnoLayout.createSequentialGroup()
                .addComponent(botonAnteriorPaginadorUno, javax.swing.GroupLayout.PREFERRED_SIZE, 43, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(botonSiguientePaginadorUno, javax.swing.GroupLayout.PREFERRED_SIZE, 43, javax.swing.GroupLayout.PREFERRED_SIZE))
        );
        paginadorUnoLayout.setVerticalGroup(
            paginadorUnoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(paginadorUnoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(botonAnteriorPaginadorUno, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(botonSiguientePaginadorUno, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        javax.swing.GroupLayout panelResultadosLayout = new javax.swing.GroupLayout(panelResultados);
        panelResultados.setLayout(panelResultadosLayout);
        panelResultadosLayout.setHorizontalGroup(
            panelResultadosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelResultadosLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelResultadosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(paginadorUno, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(tablaMedicamentoScrollPane, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 458, Short.MAX_VALUE)
                    .addGroup(panelResultadosLayout.createSequentialGroup()
                        .addComponent(botonAgregarMedicamento, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 101, Short.MAX_VALUE)
                        .addComponent(textoFiltrarResultados, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(filtrarMedicamento, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap())
        );
        panelResultadosLayout.setVerticalGroup(
            panelResultadosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelResultadosLayout.createSequentialGroup()
                .addGroup(panelResultadosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(filtrarMedicamento, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(botonAgregarMedicamento, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textoFiltrarResultados, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(tablaMedicamentoScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 138, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(paginadorUno, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        panelNombreComercial.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Nombre comercial", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, Fuente.FUENTE_PANEL_BORDE));
        panelNombreComercial.setForeground(Fuente.COLOR_NORMAL);
        panelNombreComercial.setPreferredSize(new java.awt.Dimension(496, 225));

        paginadorDos.setMaximumSize(new java.awt.Dimension(700, 14));

        botonAnteriorPaginadorDos.setFont(new java.awt.Font("Tahoma", 0, 10));
        botonAnteriorPaginadorDos.setIcon(Icono.ICONO_16_ANTERIOR);
        botonAnteriorPaginadorDos.setPreferredSize(new java.awt.Dimension(43, 23));
        botonAnteriorPaginadorDos.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonAnteriorPaginadorDosActionPerformed(evt);
            }
        });

        botonSiguientePaginadorDos.setFont(new java.awt.Font("Tahoma", 0, 10));
        botonSiguientePaginadorDos.setIcon(Icono.ICONO_16_SIGUIENTE);
        botonSiguientePaginadorDos.setPreferredSize(new java.awt.Dimension(43, 23));
        botonSiguientePaginadorDos.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonSiguientePaginadorDosActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout paginadorDosLayout = new javax.swing.GroupLayout(paginadorDos);
        paginadorDos.setLayout(paginadorDosLayout);
        paginadorDosLayout.setHorizontalGroup(
            paginadorDosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(paginadorDosLayout.createSequentialGroup()
                .addComponent(botonAnteriorPaginadorDos, javax.swing.GroupLayout.PREFERRED_SIZE, 43, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(botonSiguientePaginadorDos, javax.swing.GroupLayout.PREFERRED_SIZE, 43, javax.swing.GroupLayout.PREFERRED_SIZE))
        );
        paginadorDosLayout.setVerticalGroup(
            paginadorDosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(paginadorDosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(botonAnteriorPaginadorDos, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(botonSiguientePaginadorDos, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        textoFiltrar.setFont(Fuente.FUENTE_LABEL);
        textoFiltrar.setForeground(Fuente.COLOR_NORMAL);
        textoFiltrar.setText("Filtrar");
        textoFiltrar.setPreferredSize(new java.awt.Dimension(28, 20));

        filtrarNombreComercial.setFont(Fuente.FUENTE_TEXTFIELD);
        filtrarNombreComercial.setForeground(Fuente.COLOR_NORMAL);
        filtrarNombreComercial.setToolTipText("Filtra los datos encontrados por algún criterio");
        filtrarNombreComercial.setPreferredSize(new java.awt.Dimension(150, 20));
        filtrarNombreComercial.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                filtrarNombreComercialKeyReleased(evt);
            }
        });

        tablaNombreComercialScrollPane.setPreferredSize(new java.awt.Dimension(354, 212));

        tablaNombreComercial.setToolTipText("Click derecho para más opciones");
        tablaNombreComercial.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tablaNombreComercialverCaracteristicasMouseClicked(evt);
            }
        });
        tablaNombreComercial.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                tablaNombreComercialKeyReleased(evt);
            }
        });
        tablaNombreComercialScrollPane.setViewportView(tablaNombreComercial);
        MiModeloTabla.inicializarTabla(tablaNombreComercial);

        javax.swing.GroupLayout panelNombreComercialLayout = new javax.swing.GroupLayout(panelNombreComercial);
        panelNombreComercial.setLayout(panelNombreComercialLayout);
        panelNombreComercialLayout.setHorizontalGroup(
            panelNombreComercialLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelNombreComercialLayout.createSequentialGroup()
                .addGap(292, 292, 292)
                .addComponent(textoFiltrar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(filtrarNombreComercial, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelNombreComercialLayout.createSequentialGroup()
                .addContainerGap(378, Short.MAX_VALUE)
                .addComponent(paginadorDos, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
            .addGroup(panelNombreComercialLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(tablaNombreComercialScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 464, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );
        panelNombreComercialLayout.setVerticalGroup(
            panelNombreComercialLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelNombreComercialLayout.createSequentialGroup()
                .addGroup(panelNombreComercialLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(filtrarNombreComercial, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textoFiltrar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(tablaNombreComercialScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 138, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(paginadorDos, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        panelInformacion.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Información", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, Fuente.FUENTE_PANEL_BORDE));
        panelInformacion.setForeground(Fuente.COLOR_NORMAL);
        panelInformacion.setPreferredSize(new java.awt.Dimension(451, 228));

        panelDescripcion.setContentType("text/html");
        panelDescripcion.setEditable(false);
        panelDescripcionScrollPane.setViewportView(panelDescripcion);

        javax.swing.GroupLayout panelInformacionLayout = new javax.swing.GroupLayout(panelInformacion);
        panelInformacion.setLayout(panelInformacionLayout);
        panelInformacionLayout.setHorizontalGroup(
            panelInformacionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelInformacionLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(panelDescripcionScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 966, Short.MAX_VALUE)
                .addContainerGap())
        );
        panelInformacionLayout.setVerticalGroup(
            panelInformacionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelInformacionLayout.createSequentialGroup()
                .addComponent(panelDescripcionScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 215, Short.MAX_VALUE)
                .addContainerGap())
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(panelInformacion, javax.swing.GroupLayout.DEFAULT_SIZE, 1004, Short.MAX_VALUE)
                    .addComponent(textoDescriptivoVentana, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(panelResultados, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(panelNombreComercial, javax.swing.GroupLayout.PREFERRED_SIZE, 496, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(2, 2, 2))
                    .addComponent(panelCriterioDeBusqueda, javax.swing.GroupLayout.PREFERRED_SIZE, 496, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(textoDescriptivoVentana, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(11, 11, 11)
                .addComponent(panelCriterioDeBusqueda, javax.swing.GroupLayout.PREFERRED_SIZE, 162, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(panelResultados, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(panelNombreComercial, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(panelInformacion, javax.swing.GroupLayout.DEFAULT_SIZE, 258, Short.MAX_VALUE)
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void filtrarMedicamentoKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_filtrarMedicamentoKeyReleased
        TableRowSorter<MiModeloTabla> sorter = new TableRowSorter<MiModeloTabla>(
                        (MiModeloTabla) tablaMedicamento.getModel());

        tablaMedicamento.setRowSorter(sorter);
        String texto = filtrarMedicamento.getText();
        if (texto.length() == 0) {
            sorter.setRowFilter(null);
        } else {
            sorter.setRowFilter(RowFilter.regexFilter("(?i).*" + texto + ".*"));
        }
}//GEN-LAST:event_filtrarMedicamentoKeyReleased

    /**
     * Setea el medicamento para ser recuperada en la ventana llamadora.
     *
     * @param tabla La tabla en la que se selecciona
     *
     */
    public boolean seleccionarNombreComercial(JTable tabla) {
        if (tabla.getModel().getColumnName(1).toString().equalsIgnoreCase("nombre comercial")) {
            nombreComercialMedicamentoSeleccionado =
                    (NombreComercialMedicamento) MiModeloTabla.recuperarObjetoDeTabla(
                    NombreComercialMedicamento.class.getName(),
                    tabla);
            if (nombreComercialMedicamentoSeleccionado != null && !guiVisualizacion) {
                this.dispose();
            }
        }
        return false;
    }

    private void botonBuscarNombreComercialActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonBuscarNombreComercialActionPerformed
        CapaPresentacion.personalizarBotonesPaginadorActivado(
                botonAnteriorPaginadorUno, botonSiguientePaginadorUno);
        //Resetea paginador
        Paginador.paginarElemento[0] = false;
        buscarNombreComercial();
}//GEN-LAST:event_botonBuscarNombreComercialActionPerformed

    private void botonBuscarPrincipioActivoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonBuscarPrincipioActivoActionPerformed
        CapaPresentacion.personalizarBotonesPaginadorActivado(
                botonAnteriorPaginadorUno, botonSiguientePaginadorUno);
        //Resetea paginador
        Paginador.paginarElemento[0] = false;
        buscarPrincipioActivo();
}//GEN-LAST:event_botonBuscarPrincipioActivoActionPerformed


    private void botonBuscarGrupoTerapeuticoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonBuscarGrupoTerapeuticoActionPerformed
        CapaPresentacion.personalizarBotonesPaginadorActivado(
                botonAnteriorPaginadorUno, botonSiguientePaginadorUno);
        //Resetea paginador
        Paginador.paginarElemento[0] = false;
        buscarGrupoTerapeutico();
}//GEN-LAST:event_botonBuscarGrupoTerapeuticoActionPerformed

    private void botonBuscarLaboratorioActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonBuscarLaboratorioActionPerformed
        CapaPresentacion.personalizarBotonesPaginadorActivado(
                botonAnteriorPaginadorUno, botonSiguientePaginadorUno);
        //Resetea paginador
        Paginador.paginarElemento[0] = false;
        buscarLaboratorio();
}//GEN-LAST:event_botonBuscarLaboratorioActionPerformed

    private void verCaracteristicasMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_verCaracteristicasMouseClicked
        seleccionarComponentesTabla(tablaMedicamento, filtrarMedicamento, 
                tablaMedicamentoScrollPane);
        if (evt.getClickCount() == 2 && evt.getButton() == 1) {
                if (seleccionarNombreComercial(tablaMedicamento)) {
                this.dispose();
                }
        } else if (evt.getButton() == 3) {
            //Despliega pop-up
            if (criterioDeBusqueda.equalsIgnoreCase("nombre comercial")) {
                PopUpMenu.createPopupMenuMedicamento(tablaMedicamento, this);
            } else {
                PopUpMenu.createPopupMenuMedicamento(tablaMedicamento, this);
            }
        }
    }//GEN-LAST:event_verCaracteristicasMouseClicked
  
    private void botonAgregarMedicamentoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonAgregarMedicamentoActionPerformed
        CapaPresentacion.personalizarBotonesPaginadorDesactivado(
                botonAnteriorPaginadorUno, botonSiguientePaginadorUno);
        CapaPresentacion.personalizarBotonesPaginadorDesactivado(
                botonAnteriorPaginadorDos, botonSiguientePaginadorDos);
        //Resetea paginador
        Paginador.paginarElemento[0] = false;
        agregarNombreComercial();
    }//GEN-LAST:event_botonAgregarMedicamentoActionPerformed

    
    private void filtrarNombreComercialKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_filtrarNombreComercialKeyReleased
        TableRowSorter<MiModeloTabla> sorter = new TableRowSorter<MiModeloTabla>(
                (MiModeloTabla) tablaMedicamento.getModel());

        tablaMedicamento.setRowSorter(sorter);
        String texto = filtrarNombreComercial.getText();
        if (texto.length() == 0) {
            sorter.setRowFilter(null);
        } else {
            sorter.setRowFilter(RowFilter.regexFilter("(?i).*" + texto + ".*"));
        }
}//GEN-LAST:event_filtrarNombreComercialKeyReleased

    private void tablaNombreComercialverCaracteristicasMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tablaNombreComercialverCaracteristicasMouseClicked
        seleccionarComponentesTabla(tablaNombreComercial, filtrarNombreComercial,
                tablaNombreComercialScrollPane);
        if (evt.getClickCount() == 2 && evt.getButton() == 1) {
                if (seleccionarNombreComercial(tablaNombreComercial)) {
                this.dispose();
            }
        } else if (evt.getButton() == 3) {
            //Despliega pop-up
            PopUpMenu.createPopupMenuMedicamento(tablaNombreComercial, this);
        }
        verCaracteristicasNombreComercial(tablaNombreComercial);
}//GEN-LAST:event_tablaNombreComercialverCaracteristicasMouseClicked

    private void tablaMedicamentoMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tablaMedicamentoMouseReleased
        seleccionarComponentesTabla(tablaMedicamento, filtrarMedicamento, 
                tablaMedicamentoScrollPane);
        verCaracteristicasMedicamento(tablaMedicamento);
    }//GEN-LAST:event_tablaMedicamentoMouseReleased

    private void tablaMedicamentoKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_tablaMedicamentoKeyReleased
        if (evt.getKeyCode() == KeyEvent.VK_UP
                || evt.getKeyCode() == KeyEvent.VK_DOWN) {
            verCaracteristicasMedicamento(tablaMedicamento);
            seleccionarComponentesTabla(tablaMedicamento, filtrarMedicamento,
                tablaMedicamentoScrollPane);
        }
    }//GEN-LAST:event_tablaMedicamentoKeyReleased

    private void tablaNombreComercialKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_tablaNombreComercialKeyReleased
        if (evt.getKeyCode() == KeyEvent.VK_UP
                || evt.getKeyCode() == KeyEvent.VK_DOWN) {
            seleccionarComponentesTabla(tablaNombreComercial,
                    filtrarNombreComercial,
                tablaNombreComercialScrollPane);
            verCaracteristicasNombreComercial(tablaNombreComercial);
        }
    }//GEN-LAST:event_tablaNombreComercialKeyReleased

    private void botonAnteriorPaginadorUnoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonAnteriorPaginadorUnoActionPerformed
        paginarAtrasTablaMedicamento();
}//GEN-LAST:event_botonAnteriorPaginadorUnoActionPerformed

    private void botonSiguientePaginadorUnoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonSiguientePaginadorUnoActionPerformed
        paginarAdelanteTablaMedicamento();
}//GEN-LAST:event_botonSiguientePaginadorUnoActionPerformed

    private void botonAnteriorPaginadorDosActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonAnteriorPaginadorDosActionPerformed
        paginarAtrasTablaNombreComercial();
    }//GEN-LAST:event_botonAnteriorPaginadorDosActionPerformed

    private void botonSiguientePaginadorDosActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonSiguientePaginadorDosActionPerformed
        paginarAdelanteTablaNombreComercial();
    }//GEN-LAST:event_botonSiguientePaginadorDosActionPerformed

    /**
     * Según el criterio de busqueda consulta a la base de datos para mostrar
     * los resultados en la tabla.
     *
     */
    public void buscarSegunCriterio(String textoABuscar, String criterio) {
        //Si corresponde vuelve a cero el indice del paginador, de lo contrario
        //Lo deja en el valor que se encuentra
        Paginador.actualizaIndice(0);

        reiniciarInformacionComplementaria();
        
        if (criterio.equals(NombreComercialMedicamento.class.getName())) {
            

            vectorNombreComercial = NombreComercialMedicamentoLogica.
                    getVectorNombreComercialMedicamentoEnBdPorNombreComercialYPorEnBd(
                    textoABuscar, true);

            MiModeloTabla.cargarTablaNombreComercialMedicamento(
                    vectorNombreComercial, tablaMedicamento);
        }

        if (criterio.equals(PrincipioActivoMedicamento.class.getName())) {

            vectorPrincipioActivo = PrincipioActivoMedicamentoLogica.
                    getVectorPrincipioActivoMedicamentoPorNombreYEnBd(
                    textoABuscar);

            MiModeloTabla.cargarTablaPrincipioActivoMedicamento(
                    vectorPrincipioActivo, tablaMedicamento);
        }

        if (criterio.equals(GrupoTerapeuticoMedicamento.class.getName())) {

            vectorGrupoTerapeutico = GrupoTerapeuticoMedicamentoLogica.
                    getVectorGrupoTerapeuticoMedicamentoPorNombreYEnBd(
                    textoABuscar);

            MiModeloTabla.cargarTablaGrupoTerapeuticoMedicamento(
                    vectorGrupoTerapeutico, tablaMedicamento);
        }

        if (criterio.equals(LaboratorioMedicamento.class.getName())) {
            
            vectorlLaboratorio = LaboratorioMedicamentoLogica.
                    getVectorLaboratorioMedicamentoPorNombreYEnBd(
                    textoABuscar);

            MiModeloTabla.cargarTablaLaboratorioMedicamento(
                vectorlLaboratorio, tablaMedicamento);
        }
    }

    /**
     * Agrega un nombre comercial nuevo.
     */
    public void agregarNombreComercial() {
        RestriccionAcceso.MedicamentoPresentacion(
               null, true, null);

        NombreComercialMedicamento nombreComercialMedicamentoDeTabla =
                MedicamentoPresentacion.
                getNombreComercialMedicamento();
        if (nombreComercialMedicamentoDeTabla != null) {
            if (!guiVisualizacion &&
                        nombreComercialMedicamentoDeTabla.
                        getComposicionMedicamento() != null) {
                nombreComercialMedicamentoSeleccionado =
                        nombreComercialMedicamentoDeTabla;
                this.dispose();
            } else {
                if (nombreComercialMedicamentoDeTabla.getComposicionMedicamento() != null) {
                    vectorNombreComercial = new Vector<NombreComercialMedicamento>();
                    vectorNombreComercial.add(nombreComercialMedicamentoDeTabla);
                    MiModeloTabla.cargarTablaNombreComercialMedicamento(
                            vectorNombreComercial, tablaMedicamento);
                    MiModeloTabla.seleccionarFilaDeTabla(
                            String.valueOf(nombreComercialMedicamentoDeTabla.
                            getIdNombreComercialMedicamento()), tablaMedicamento,
                            tablaMedicamentoScrollPane);
                    verCaracteristicasNombreComercial(tablaMedicamento);
                }
            }
        }
    }

    /**
     * Modifica un nombre comercial.
     *
     * @param tabla La tabla de nombres comerciales
     *
     */
    public void modificarNombreComercial() {
        //Modificar Nombre Comercial
        if (tablaSeleccionada != null) {
            NombreComercialMedicamento nombreComercialMedicamentoDeTabla =
                    (NombreComercialMedicamento) MiModeloTabla.recuperarObjetoDeTabla(
                    NombreComercialMedicamento.class.getName(),
                    tablaSeleccionada);
            if (nombreComercialMedicamentoDeTabla != null 
                    && tablaSeleccionada.getModel().getColumnName(1).toString().
                    equalsIgnoreCase("nombre comercial")) {
                RestriccionAcceso.MedicamentoPresentacion(
                        null, true, nombreComercialMedicamentoDeTabla);
                if (MedicamentoPresentacion.seMofifico) {
                    if (tablaMedicamento.getModel().getColumnName(1).toString().
                        equalsIgnoreCase("nombre comercial")) {
                        vectorNombreComercial = new Vector<NombreComercialMedicamento>();
                        vectorNombreComercial.add(nombreComercialMedicamentoDeTabla);
                        MiModeloTabla.cargarTablaNombreComercialMedicamento(
                                vectorNombreComercial, tablaMedicamento);
                        MiModeloTabla.seleccionarFilaDeTabla(
                                String.valueOf(nombreComercialMedicamentoDeTabla.
                                getIdNombreComercialMedicamento()), tablaMedicamento,
                                tablaMedicamentoScrollPane);
                    verCaracteristicasNombreComercial(tablaMedicamento);
                    } else {
                        vectorNombreComercial = new Vector<NombreComercialMedicamento>();
                        vectorNombreComercial.add(nombreComercialMedicamentoDeTabla);
                        MiModeloTabla.cargarTablaNombreComercialMedicamento(
                                vectorNombreComercial, tablaNombreComercial);
                        MiModeloTabla.seleccionarFilaDeTabla(
                                String.valueOf(nombreComercialMedicamentoDeTabla.
                                getIdNombreComercialMedicamento()), tablaNombreComercial,
                                tablaNombreComercialScrollPane);
                    }
                    verCaracteristicasNombreComercial(tablaSeleccionada);
                }
            }
        }
    }

    /**
     * Elimina un nombre comercial.
     *
     * @param tabla La tabla de nombres comerciales
     * @param filtrar El texto a filtrar
     *
     */
    public void eliminarMedicamento() {
        //Eliminar Nombre comercial
        if (tablaSeleccionada != null) {
            NombreComercialMedicamento nombreComercialMedicamentoDeTabla =
                    (NombreComercialMedicamento) MiModeloTabla.recuperarObjetoDeTabla(
                    NombreComercialMedicamento.class.getName(),
                    tablaSeleccionada);
            if (nombreComercialMedicamentoDeTabla != null
                     && tablaSeleccionada.getModel().getColumnName(1).toString().
                    equalsIgnoreCase("nombre comercial")) {
                if (CapaPresentacion.modoCarga ||
                        CapaPresentacion.modoModificacion) {
                    int confirmado = MensajePresentacion.confimarEliminacionObjeto(
                            "medicamento", "el");
                    if (JOptionPane.OK_OPTION == confirmado
                            && NombreComercialMedicamentoLogica.
                            eliminarNombreComercialMedicamento(
                            nombreComercialMedicamentoDeTabla)) {
                        vectorNombreComercial.remove(nombreComercialMedicamentoDeTabla);

                        MiModeloTabla.
                                cargarTablaNombreComercialMedicamento(vectorNombreComercial, tablaMedicamento);
                        verCaracteristicasNombreComercial(tablaSeleccionada);
                    }
                } else {
                    MensajePresentacion.informarUsuarioRestringido();
                }
            }
        }
    }

    public static NombreComercialMedicamento getNombreComercialSeleccionado() {
        return nombreComercialMedicamentoSeleccionado;
    }

    /**
     * Muestra las características de un determinado medicamento.
     *
     * @param tabla La tabla de los nombres comerciales     *
     */
    public void verCaracteristicasMedicamento(JTable tabla) {
        verCaracteristicasNombreComercial(tabla);

        verCaracteristicasPrincipioActivo();

        verCaracteristicasGrupoTerapeutico();

        verCaracteristicasLaboratorio();
    }

    /**
     * Muestra las características para un Nombre comercial.
     *
     * @param tabla La tabla de los nombres comerciales
     */
    public void verCaracteristicasNombreComercial(JTable tabla) {

        if (tabla.getModel().getColumnName(1).toString().
                    equalsIgnoreCase("nombre comercial")) {
            detallesNombreComercial(tabla);
        }
    }

    /**
     * Muestra las características del Principio activo.
     *
     */
    public void verCaracteristicasPrincipioActivo() {
        if (tablaMedicamento.getModel().getColumnName(1).toString().
                    equalsIgnoreCase("principio activo")) {
            detallesPrincipioActivo();
        }
    }

    /**
     * Muestra las características del grupo terapéutico.
     *
     */
    public void verCaracteristicasGrupoTerapeutico() {
        if (tablaMedicamento.getModel().getColumnName(1).toString().
                equalsIgnoreCase("grupo terapéutico")) {

            grupoTerapeuticoMedicamento = (GrupoTerapeuticoMedicamento)
                    MiModeloTabla.recuperarObjetoDeTabla(
                    GrupoTerapeuticoMedicamento.class.getName(), tablaMedicamento);

            Paginador.paginarElemento[1] = false;
            cargarTablaNombresComercial();

            String textoAIncluir = "";
            panelDescripcion.setContentType("text/html");
            panelDescripcion.setText(textoAIncluir);
        }
    }

    /**
     * Muestra las características del laboratorio.
     *
     */
    public void verCaracteristicasLaboratorio() {
        if (tablaMedicamento.getModel().getColumnName(1).toString().
                equalsIgnoreCase("laboratorio")) {

            laboratorioMedicamento =
                    (LaboratorioMedicamento) MiModeloTabla.recuperarObjetoDeTabla(
                    LaboratorioMedicamento.class.getName(),
                    tablaMedicamento);

            Paginador.paginarElemento[1] = false;
            cargarTablaNombresComercial();

            String textoAIncluir = "";
            panelDescripcion.setContentType("text/html");
            panelDescripcion.setText(textoAIncluir);
        }
    }

    /**
     * Carga el panel con información correspondiente a nombres comerciales
     * o principios activos.
     */
    private void cargarPanelDeInformacion() {
        recopilarInformacion();
        panelDescripcion.setCaretPosition(0);
    }

    /**
     * Carga el texto a visualizar.
     *
     */
    private void recopilarInformacion() {
        String textoAIncluir = "";

        if (nombreComercialMedicamento != null) {
            textoAIncluir =
                    recopilarNombreComercial(textoAIncluir);
        } else if (principioActivoMedicamentoSeleccionado != null) {
            textoAIncluir =
                    recopilarPrincipioActivo(textoAIncluir);
            textoAIncluir =
                    recopilarAsociacionPrincipioActivo(textoAIncluir);
        }
        panelDescripcion.setContentType("text/html");
        panelDescripcion.setText(textoAIncluir);
    }

    /**
     * Carga los datos de información de la ventana.
     * @param textoAIncluir El texto a cargar
     * @return El String a cargar
     */
    private String recopilarNombreComercial(String textoAIncluir) {
        String nombreComercial = "";
        String laboratorio = "";
        String composicion = "";
        String presentaciones = "";
        String accionTerapeutica = "";
        String contraindicaciones = "";
        String dosificacion = "";
        String indicaciones = "";

        if (nombreComercialMedicamento != null) {

            if (nombreComercialMedicamento.
                    getNombreNombreComercialMedicamento() != null) {
                nombreComercial =
                        nombreComercialMedicamento.
                        getNombreNombreComercialMedicamento();
            } else {
                nombreComercial = "No posee";
            }
            if (nombreComercialMedicamento.
                    getPresentacionesNombreComercialMedicamento() != null) {
                presentaciones =
                        nombreComercialMedicamento.
                        getPresentacionesNombreComercialMedicamento();
            } else {
                presentaciones = "No posee";
            }
            if (nombreComercialMedicamento.
                    getAccionTerapeuticaNombreComercialMedicamento() != null) {
                accionTerapeutica =
                        nombreComercialMedicamento.
                        getAccionTerapeuticaNombreComercialMedicamento();
            } else {
                accionTerapeutica = "No posee";
            }
            if (nombreComercialMedicamento.
                    getDosificacionNombreComercialMedicamento() != null) {
                dosificacion =
                        nombreComercialMedicamento.
                        getDosificacionNombreComercialMedicamento();
            } else {
                dosificacion = "No posee";
            }
            if (nombreComercialMedicamento.
                    getIndicacionesNombreComercialMedicamento() != null) {
                indicaciones =
                        nombreComercialMedicamento.
                        getIndicacionesNombreComercialMedicamento();
            } else {
                indicaciones = "No posee";
            }
            if (nombreComercialMedicamento.
                    getLaboratorioMedicamento().
                    getNombreLaboratorioMedicamento() != null) {
                laboratorio =
                        nombreComercialMedicamento.
                        getLaboratorioMedicamento().
                        getNombreLaboratorioMedicamento();
            } else {
                laboratorio = "No posee";
            }
            if (nombreComercialMedicamento.
                    getComposicionMedicamento().
                    getDescripcionComposicionMedicamento() != null) {
                composicion =
                        nombreComercialMedicamento.
                        getComposicionMedicamento().
                        getDescripcionComposicionMedicamento();
            } else {
                composicion = "No posee";
            }
            if (nombreComercialMedicamento.
                    getContraindicacionesMedicamento().
                    getDescripcionContraindicacionesMedicamento() != null) {
                contraindicaciones = nombreComercialMedicamento.
                        getContraindicacionesMedicamento().
                        getDescripcionContraindicacionesMedicamento();
            } else {
                contraindicaciones = "No posee";
            }

            textoAIncluir = NombreComercialMedicamentoLogica.getNombreComercialHTML(
                    nombreComercial, laboratorio, composicion, presentaciones,
                    accionTerapeutica, contraindicaciones,
                    dosificacion, indicaciones);

        }
        return textoAIncluir;
    }

    /**
     * Carga los datos de información de la ventana.
     * @param textoAIncluir El texto a cargar
     * @return El String a cargar
     */
    private String recopilarPrincipioActivo(String textoAIncluir) {
        String principioActivo = "";
        String contraindicaciones = "";
        String precauciones = "";
        String embarazoYLactancia = "";
        String interacciones = "";
        if (principioActivoMedicamentoSeleccionado != null
                && (principioActivoMedicamentoSeleccionado.
                getContraindicacionesPrincipioActivoMedicamento() != null)
                && (principioActivoMedicamentoSeleccionado.
                getPrecaucionesPrincipioActivoMedicamento() != null)
                && (principioActivoMedicamentoSeleccionado.
                getEmbarazoPrincipioActivoMedicamento() != null)
                && (principioActivoMedicamentoSeleccionado.
                getInteraccionesPrincipioActivoMedicamento() != null)) {

            contraindicaciones =
                    principioActivoMedicamentoSeleccionado.
                    getContraindicacionesPrincipioActivoMedicamento();
            precauciones =
                    principioActivoMedicamentoSeleccionado.
                    getPrecaucionesPrincipioActivoMedicamento();
            embarazoYLactancia =
                    principioActivoMedicamentoSeleccionado.
                    getEmbarazoPrincipioActivoMedicamento();
            interacciones =
                    principioActivoMedicamentoSeleccionado.
                    getInteraccionesPrincipioActivoMedicamento();
            principioActivo =
                    principioActivoMedicamentoSeleccionado.
                    getNombrePrincipioActivoMedicamento();

            textoAIncluir = PrincipioActivoMedicamentoLogica.getPrincipioActivoHTML(
                    principioActivo, contraindicaciones, precauciones,
                    embarazoYLactancia, interacciones);

            this.setTitle("Información del principio activo: "
                    + principioActivoMedicamentoSeleccionado.
                    getNombrePrincipioActivoMedicamento());

        }
        return textoAIncluir;
    }

    /**
     * Carga los datos de información de la ventana.
     *
     * @param textoAIncluir El texto a cargar
     * @return El String a cargar
     */
    private String recopilarAsociacionPrincipioActivo(String textoAIncluir) {
        String principioActivo = "";
        if (nombreComercialMedicamento != null
                && principioActivoMedicamentoSeleccionado != null
                && (principioActivoMedicamentoSeleccionado.
                getContraindicacionesPrincipioActivoMedicamento() != null)
                && (principioActivoMedicamentoSeleccionado.
                getPrecaucionesPrincipioActivoMedicamento() != null)
                && (principioActivoMedicamentoSeleccionado.
                getEmbarazoPrincipioActivoMedicamento() != null)
                && (principioActivoMedicamentoSeleccionado.
                getInteraccionesPrincipioActivoMedicamento() != null)) {
            principioActivo =
                    principioActivoMedicamentoSeleccionado.
                    getNombrePrincipioActivoMedicamento();

            textoAIncluir = PrincipioActivoMedicamentoLogica.
                    getAsociacionPrincipioActivoHTML(principioActivo);

            this.setTitle("Información del principio activo: "
                    + principioActivoMedicamentoSeleccionado.
                    getNombrePrincipioActivoMedicamento());
        }

        if (textoAIncluir.isEmpty()) {
                return recopilarNoExisteInformacionDisponible(textoAIncluir);
        }

        return textoAIncluir;
    }

    /**
     * Carga los datos de información de la ventana.
     *
     * @param textoAIncluir El texto a cargar
     * @return El String a cargar
     */
    private String recopilarNoExisteInformacionDisponible(String textoAIncluir) {

        textoAIncluir =
                NombreComercialMedicamentoLogica.getNoExisteInformacionDisponibleHTML(
                "No existe la información solicitada");
        return textoAIncluir;
    }

    /**
     * Selecciona un nombreComercial de una tabla y muestra el contenido
     * en el area de texto.
     *
     * @param tabla La tabla en la que se selecciona el nombre comercial
     */
    private void detallesNombreComercial(JTable tabla) {
        nombreComercialMedicamento = (NombreComercialMedicamento)
                MiModeloTabla.recuperarObjetoDeTabla(
                NombreComercialMedicamento.class.getName(),
                tabla);

        principioActivoMedicamentoSeleccionado = null;

        cargarPanelDeInformacion();
    }

    /**
     * Selecciona un principioActivo de una tabla y muestra el contenido
     * en el area de texto, asi como los nombres comerciales asociados en la
     * tabla de nombres comerciales.
     *
     */
    private void detallesPrincipioActivo() {
        principioActivoMedicamentoSeleccionado = (PrincipioActivoMedicamento)
                MiModeloTabla.recuperarObjetoDeTabla(String.valueOf(
                PrincipioActivoMedicamento.class.getName()), tablaMedicamento);

        Paginador.paginarElemento[1] = false;
        cargarTablaNombresComercial();

        nombreComercialMedicamento = null;

        cargarPanelDeInformacion();
    }

    /**
     * Vuelve a cargar la ventana de nombres comerciales y el panel de texto
     * de manera vacía, sin nungún dato.
     *
     */
    private void reiniciarInformacionComplementaria() {
        MiModeloTabla.cargarTablaNombreComercialMedicamento(
                null, tablaNombreComercial);
        nombreComercialMedicamento = null;
        principioActivoMedicamentoSeleccionado = null;
        String textoAIncluir = "";
        panelDescripcion.setContentType("text/html");
        panelDescripcion.setText(textoAIncluir);
    }

    /**
     * Setea la tabla y los componentes de la misma con la que se esta trabajando.
     *
     * @param tabla La tabla a setear
     * @param filtrar El texto filtrar a setear
     * @param scrollPane El scroll a setear
     */
    public void seleccionarComponentesTabla(JTable tabla, JTextField filtrar,
            JScrollPane scrollPane) {
        tablaSeleccionada = tabla;
        filtrarSeleccionado = filtrar;
        scrollPaneSeleccionado = scrollPane;
    }

    /**
     * Al presionar buscar permite la búsqueda.
     *
     * @param Indica si la busqueda proviene de una paginacion.
     * True si proviene, false en caso contrario
     */
    public void buscarNombreComercial() {
        criterioDeBusqueda = "nombre comercial";
        panelNombreComercial.setVisible(false);
        buscarSegunCriterio(busquedaNombreComercial.getText(),
                NombreComercialMedicamento.class.getName());
    }

    /**
     * Al presionar buscar permite la búsqueda.
     */
    private void buscarPrincipioActivo() {
        criterioDeBusqueda = "principio activo";
        panelNombreComercial.setVisible(true);
        buscarSegunCriterio(busquedaPrincipioActivo.getText(),
                PrincipioActivoMedicamento.class.getName());
    }

    /**
     * Al presionar buscar permite la búsqueda.
     */
    private void buscarGrupoTerapeutico() {
        criterioDeBusqueda = "grupo terapéutico";
        panelNombreComercial.setVisible(true);
        buscarSegunCriterio(busquedaGrupoTerapeutico.getText(),
                GrupoTerapeuticoMedicamento.class.getName());
    }

    /**
     * Al presionar buscar permite la búsqueda.
     */
    private void buscarLaboratorio() {
        criterioDeBusqueda = "laboratorio";
        panelNombreComercial.setVisible(true);
        buscarSegunCriterio(busquedaLaboratorio.getText(),
                LaboratorioMedicamento.class.getName());
    }

    /**
     * Selecciona el medicamento segun se pueda, llamandose desde el bar menu.
     */
    public void seleccionarDesdeMenuBar() {
        if (criterioDeBusqueda.equalsIgnoreCase("nombre comercial")) {
            seleccionarNombreComercial(tablaMedicamento);
        } else {
            seleccionarNombreComercial(tablaNombreComercial);
        }
    }    

    /**
     * Carga la tabla de nombres comerciales según el elemento seleccionado
     * correspondiente.
     */
    private void cargarTablaNombresComercial() {
        //Si corresponde vuelve a cero el indice del paginador, de lo contrario
        //Lo deja en el valor que se encuentra
        Paginador.actualizaIndice(1);
        vectorNombreComercial = null;

        if (tablaMedicamento.getColumnName(0).
                    equalsIgnoreCase("principio activo")) {
                    if (principioActivoMedicamentoSeleccionado != null) {
                        vectorNombreComercial = NombreComercialMedicamentoLogica.
                        getVectorNombreComercialMedicamentoEnBdPorPrincipioActivoMedicamentoYPorEnBd(
                        principioActivoMedicamentoSeleccionado.getNombrePrincipioActivoMedicamento(),
                        true);
                    }
                } else if (tablaMedicamento.getColumnName(0).
                    equalsIgnoreCase("grupo terapéutico")) {
                    if (grupoTerapeuticoMedicamento != null) {
                        vectorNombreComercial = NombreComercialMedicamentoLogica.
                        getVectorNombreComercialMedicamentoEnBdPorGrupoTerapeuticoMedicamentoYPorEnBd(
                        grupoTerapeuticoMedicamento.
                        getNombreGrupoTerapeuticoMedicamento(), true);
                    }
                } else if (tablaMedicamento.getColumnName(0).
                    equalsIgnoreCase("laboratorio")) {
                    if (laboratorioMedicamento != null) {
                        vectorNombreComercial = NombreComercialMedicamentoLogica.
                        getVectorNombreComercialMedicamentoEnBdPorLaboratorioMedicamentoYPorEnBd(
                        laboratorioMedicamento.getNombreLaboratorioMedicamento(),
                        true);
                    }
                }       
        MiModeloTabla.cargarTablaNombreComercialMedicamento(
                vectorNombreComercial, tablaNombreComercial);

        CapaPresentacion.personalizarBotonesPaginadorActivado(
                botonAnteriorPaginadorDos, botonSiguientePaginadorDos);
    }

    /**
     * Setea en cada componente del JDialog los eventos que capturarán la tecla
     * enter y escape.
     */
    private void setearEventosQueCapturanTeclaEnterYEscape() {
        //Declaración del evento a capturar
        KeyListener keyListenerBuscarNombreComercial = new KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
                    //Llamada al método que capturará el boton enter y
                    //trabajará sobre el mismo

                    //Resetea el paginador
                    Paginador.paginarElemento[0] = false;
                    buscarNombreComercial();
                }
            }
        };
        //Declaración del evento a capturar
        KeyListener keyListenerBuscarPrincipioActivo = new KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
                    //Llamada al método que capturará el boton enter y
                    //trabajará sobre el mismo

                    //Resetea el paginador
                    Paginador.paginarElemento[0] = false;
                    buscarPrincipioActivo();
                }
            }
        };
        //Declaración del evento a capturar
        KeyListener keyListenerBuscarGrupoTerapeutico = new KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
                    //Llamada al método que capturará el boton enter y
                    //trabajará sobre el mismo

                    //Resetea el paginador
                    Paginador.paginarElemento[0] = false;
                    buscarGrupoTerapeutico();
                }
            }
        };
        //Declaración del evento a capturar
        KeyListener keyListenerBuscarLaboratorio = new KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
                    //Llamada al método que capturará el boton enter y
                    //trabajará sobre el mismo

                    //Resetea el paginador
                    Paginador.paginarElemento[0] = false;
                    buscarLaboratorio();
                }
            }
        };
        //Declaración del evento a capturar
        KeyListener keyListenerTabla = new KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
                    //Llamada al método que capturará el boton enter y
                    //trabajará sobre el mismo
                    if (tablaSeleccionada.getModel().getColumnName(1).toString().
                        equalsIgnoreCase("nombre comercial")) {
                        seleccionarNombreComercial(tablaSeleccionada);
                        dispose();
                    }
                }
            }
        };
        //Declaración del evento a capturar
        KeyListener keyListenerEscape = new KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                if (evt.getKeyCode() == KeyEvent.VK_ESCAPE) {
                    //Llamada al método que capturará el boton enter y
                    //trabajará sobre el mismo
                        dispose();
                }
            }
        };
        //Setear eventos TextField
        busquedaNombreComercial.addKeyListener(keyListenerBuscarNombreComercial);
        busquedaNombreComercial.addKeyListener(keyListenerEscape);
        busquedaPrincipioActivo.addKeyListener(keyListenerBuscarPrincipioActivo);
        busquedaPrincipioActivo.addKeyListener(keyListenerEscape);
        busquedaGrupoTerapeutico.addKeyListener(keyListenerBuscarGrupoTerapeutico);
        busquedaGrupoTerapeutico.addKeyListener(keyListenerEscape);
        busquedaLaboratorio.addKeyListener(keyListenerBuscarLaboratorio);
        busquedaLaboratorio.addKeyListener(keyListenerEscape);

        tablaMedicamento.addKeyListener(keyListenerTabla);
        tablaMedicamento.addKeyListener(keyListenerEscape);
        tablaNombreComercial.addKeyListener(keyListenerTabla);
        tablaNombreComercial.addKeyListener(keyListenerEscape);

        botonAnteriorPaginadorUno.addKeyListener(keyListenerEscape);
        botonSiguientePaginadorUno.addKeyListener(keyListenerEscape);

        botonAnteriorPaginadorDos.addKeyListener(keyListenerEscape);
        botonSiguientePaginadorDos.addKeyListener(keyListenerEscape);

        filtrarMedicamento.addKeyListener(keyListenerEscape);
        filtrarNombreComercial.addKeyListener(keyListenerEscape);

        botonAgregarMedicamento.addKeyListener(keyListenerEscape);
        botonBuscarGrupoTerapeutico.addKeyListener(keyListenerEscape);
        botonBuscarLaboratorio.addKeyListener(keyListenerEscape);
        botonBuscarNombreComercial.addKeyListener(keyListenerEscape);
        botonBuscarPrincipioActivo.addKeyListener(keyListenerEscape);

        panelDescripcion.addKeyListener(keyListenerEscape);
    }
    
    //FUNCIONES DE PAGINADOR------------------------------------------//

    /**
     * Inicia el/los paginadores activos en esta ventana
     */
    private void iniciarPaginador() {
        //Rango de filas para cada paginador
        int rangoFilas[] = new int[CapaLogica.PAGINADOR_PAGINADORES_SIMULTANEOS];

        //Rango de filas para el paginador 1
        rangoFilas[0] = 10;
        //Rango de filas para el paginador 2
        rangoFilas[1] = 10;
        //Rango de filas para el paginador 3
        rangoFilas[2] = 0;
        
        Paginador.inicializarPaginador(rangoFilas);

        CapaPresentacion.personalizarBotonesPaginadorDesactivado(
                botonAnteriorPaginadorUno, botonSiguientePaginadorUno);
        CapaPresentacion.personalizarBotonesPaginadorDesactivado(
                botonAnteriorPaginadorDos, botonSiguientePaginadorDos);

    }

    /**
     * Realiza la paginación hacia atrás.
     */
    private void paginarAtrasTablaMedicamento() {
        //Retrocede el los índices
        Paginador.atrasPaginador(0);
        Paginador.paginarElemento[0] = true;

        //Vuelve a buscar con los nuevos índices
        if (tablaMedicamento.getModel().getColumnCount() > 0) {
                if (tablaMedicamento.getColumnName(0).
                    equalsIgnoreCase("nombre comercial")) {
                        buscarNombreComercial();
                } else if (tablaMedicamento.getColumnName(0).
                    equalsIgnoreCase("principio activo")) {
                        buscarPrincipioActivo();
                } else if (tablaMedicamento.getColumnName(0).
                    equalsIgnoreCase("grupo terapéutico")) {
                        buscarGrupoTerapeutico();
                } else if (tablaMedicamento.getColumnName(0).
                    equalsIgnoreCase("laboratorio")) {
                        buscarLaboratorio();
                }
        }
    }

    /**
     * Realiza la paginación hacia adelante, teniendo en cuenta que existan elementos,
     * de lo contrario no procede a listarlos.
     */
    private void paginarAdelanteTablaMedicamento() {
        //Adelanta los índices
        Paginador.adelantePaginador(0);
        Paginador.paginarElemento[0] = true;

        //Vuelve a buscar con los nuevos índices
        if (tablaMedicamento.getModel().getColumnCount() > 0) {

            //Si no hay elementos siguientes se vuelven los índices hacia atras
            if (tablaMedicamento.getColumnName(0).
                    equalsIgnoreCase("nombre comercial")) {
                if (NombreComercialMedicamentoLogica.
                        getVectorNombreComercialMedicamentoEnBdPorNombreComercialYPorEnBd(
                        busquedaNombreComercial.getText(), true) == null) {
                    Paginador.atrasPaginador(0);
                }
                buscarNombreComercial();
            } else if (tablaMedicamento.getColumnName(0).
                    equalsIgnoreCase("principio activo")) {
                //Si no hay elementos siguientes se vuelven los índices hacia atras
                if (PrincipioActivoMedicamentoLogica.
                        getVectorPrincipioActivoMedicamentoPorNombreYEnBd(
                        busquedaPrincipioActivo.getText()) == null) {
                    Paginador.atrasPaginador(0);
                } 
                buscarPrincipioActivo();
            } else if (tablaMedicamento.getColumnName(0).
                    equalsIgnoreCase("grupo terapéutico")) {
                //Si no hay elementos siguientes se vuelven los índices hacia atras
                if (GrupoTerapeuticoMedicamentoLogica.
                        getVectorGrupoTerapeuticoMedicamentoPorNombreYEnBd(
                        busquedaGrupoTerapeutico.getText()) == null) {
                    Paginador.atrasPaginador(0);
                }
                buscarGrupoTerapeutico();
            } else if (tablaMedicamento.getColumnName(0).
                    equalsIgnoreCase("laboratorio")) {
                //Si no hay elementos siguientes se vuelven los índices hacia atras
                if (LaboratorioMedicamentoLogica.
                        getVectorLaboratorioMedicamentoPorNombreYEnBd(
                        busquedaLaboratorio.getText()) == null) {
                    Paginador.atrasPaginador(0);
                }
                buscarLaboratorio();
            }
        }
    }

    /**
     * Realiza la paginación hacia atrás.
     */
    private void paginarAtrasTablaNombreComercial() {
        //Retrocede el los índices
        Paginador.atrasPaginador(1);
        Paginador.paginarElemento[1] = true;

        //Vuelve a buscar con los nuevos índices
        if (tablaMedicamento.getModel().getColumnCount() > 0) {
            cargarTablaNombresComercial();
        }
    }

    /**
     * Realiza la paginación hacia adelante, teniendo en cuenta que existan elementos,
     * de lo contrario no procede a listarlos.
     */
    private void paginarAdelanteTablaNombreComercial() {
        //Adelanta los índices
        Paginador.adelantePaginador(1);
        Paginador.paginarElemento[1] = true;

        if (tablaMedicamento.getColumnName(0).
                equalsIgnoreCase("principio activo")) {
                    if (principioActivoMedicamentoSeleccionado != null &&
                            NombreComercialMedicamentoLogica.
                        getVectorNombreComercialMedicamentoEnBdPorPrincipioActivoMedicamentoYPorEnBd(
                        principioActivoMedicamentoSeleccionado.getNombrePrincipioActivoMedicamento(),
                        true) == null) {

                            Paginador.atrasPaginador(1);
                   }
            } else if (tablaMedicamento.getColumnName(0).
                equalsIgnoreCase("grupo terapéutico")) {
                    if (grupoTerapeuticoMedicamento != null &&
                            NombreComercialMedicamentoLogica.
                        getVectorNombreComercialMedicamentoEnBdPorGrupoTerapeuticoMedicamentoYPorEnBd(
                        grupoTerapeuticoMedicamento.
                        getNombreGrupoTerapeuticoMedicamento(), true) == null) {

                            Paginador.atrasPaginador(1);
                    }
            } else if (tablaMedicamento.getColumnName(0).
                equalsIgnoreCase("laboratorio")) {
                    if (laboratorioMedicamento != null &&
                            NombreComercialMedicamentoLogica.
                        getVectorNombreComercialMedicamentoEnBdPorLaboratorioMedicamentoYPorEnBd(
                        laboratorioMedicamento.getNombreLaboratorioMedicamento(),
                        true) == null) {

                            Paginador.atrasPaginador(1);
                    }
            }           
            cargarTablaNombresComercial();
        }

    //FUNCIONES DE PAGINADOR------------------------------------------//

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton botonAgregarMedicamento;
    private javax.swing.JButton botonAnteriorPaginadorDos;
    private javax.swing.JButton botonAnteriorPaginadorUno;
    private javax.swing.JButton botonBuscarGrupoTerapeutico;
    private javax.swing.JButton botonBuscarLaboratorio;
    public static javax.swing.JButton botonBuscarNombreComercial;
    private javax.swing.JButton botonBuscarPrincipioActivo;
    private javax.swing.JButton botonSiguientePaginadorDos;
    private javax.swing.JButton botonSiguientePaginadorUno;
    private javax.swing.JTextField busquedaGrupoTerapeutico;
    private javax.swing.JTextField busquedaLaboratorio;
    private javax.swing.JTextField busquedaNombreComercial;
    private javax.swing.JTextField busquedaPrincipioActivo;
    private javax.swing.JTextField filtrarMedicamento;
    private javax.swing.JTextField filtrarNombreComercial;
    private javax.swing.JPanel paginadorDos;
    private javax.swing.JPanel paginadorUno;
    private javax.swing.JPanel panelCriterioDeBusqueda;
    private javax.swing.JEditorPane panelDescripcion;
    private javax.swing.JScrollPane panelDescripcionScrollPane;
    private javax.swing.JPanel panelInformacion;
    private javax.swing.JPanel panelNombreComercial;
    private javax.swing.JPanel panelResultados;
    private javax.swing.JTable tablaMedicamento;
    private javax.swing.JScrollPane tablaMedicamentoScrollPane;
    private javax.swing.JTable tablaNombreComercial;
    private javax.swing.JScrollPane tablaNombreComercialScrollPane;
    private javax.swing.JLabel textoDescriptivoVentana;
    private javax.swing.JLabel textoFiltrar;
    private javax.swing.JLabel textoFiltrarResultados;
    private javax.swing.JLabel textoGrupoTerapeutico;
    private javax.swing.JLabel textoLaboratorio;
    private javax.swing.JLabel textoNombreComercial;
    private javax.swing.JLabel textoPrincipioActivo;
    // End of variables declaration//GEN-END:variables
    public Vector<NombreComercialMedicamento> vectorNombreComercial;
    public Vector<PrincipioActivoMedicamento> vectorPrincipioActivo;
    public Vector<GrupoTerapeuticoMedicamento> vectorGrupoTerapeutico;
    public Vector<LaboratorioMedicamento> vectorlLaboratorio;
    public NombreComercialMedicamento nombreComercialMedicamento;
    public static NombreComercialMedicamento nombreComercialMedicamentoSeleccionado;
    public PrincipioActivoMedicamento principioActivoMedicamentoSeleccionado;
    public LaboratorioMedicamento laboratorioMedicamento;
    public GrupoTerapeuticoMedicamento grupoTerapeuticoMedicamento;
    public String criterioDeBusqueda;
    public boolean guiVisualizacion;
    public JTable tablaSeleccionada;
    public JTextField filtrarSeleccionado;
    public JScrollPane scrollPaneSeleccionado;
}
